/*
 * Copyright (c) 2023.11.29 Fengxun
 * Version:5.2.2
 */

const {
  getCheckpointList,
  saveCheckpointList,
  getCheckpointByID
} = require("../../utils/initdata")
const {
  saveRemoteGPS,
  getPageConfig,
} = require("../../utils/custom_loading")
const {
  calculateDistance
} = require("../../utils/gps")

// pages/main/index.js
var startPoint

Page({

  /**
   * 页面的初始数据
   */
  data: {
    //按钮位置参数
    buttonTop: 0,
    buttonLeft: 0,
    windowHeight: '',
    windowWidth: '',
    gold: 0,
    checkpoint_list: []
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 初始化配置
    const config = getPageConfig('index')
    if (config) {
      if (config.gps === undefined) {
        config.gps = false
      }
      this.setData({
        config
      })
    }

    if (wx.getStorageSync('welcome')) {
      // 默认导航到第一个任务（欢迎页面）
      wx.redirectTo({
        url: 'task?id=WELCOME',
      })
      return
    }

    // UI
    let self = this;
    wx.getSystemInfo({
      success: function (res) {
        self.setData({
          windowHeight: res.windowHeight,
          windowWidth: res.windowWidth,
          buttonTop: res.windowHeight * 0.35, //这里定义按钮的初始位置
          buttonLeft: res.windowWidth * 0.80, //这里定义按钮的初始位置
        })
      }
    })

    // 获取所有关卡信息
    this.checkpoint_list = getCheckpointList()

    // 获取当前GPS位置
    this.getLocalGPS()
  },

  // 获取当前GPS位置，然后决定关卡是否显示/排序
  getLocalGPS() {
    let self = this

    // 清空当前列表
    this.setData({
      checkpoint_list: []
    })

    // 获取用户GPS
    wx.getLocation({
      type: 'gcj02',
      success(res) {
        const latitude = res.latitude
        const longitude = res.longitude
        const speed = res.speed
        const accuracy = res.accuracy

        self.setData({
          gps: latitude + ',' + longitude
        })
        // console.log('location', res)

        // 保存GPS到远程服务器
        saveRemoteGPS(latitude + ',' + longitude)

        // 计算用户和关卡的距离
        self.getCheckpointDistance(latitude, longitude)
      }
    })
  },

  getCheckpointDistance(lat, long) {
    const checkpoint_list = this.checkpoint_list
    const demo = wx.getStorageSync('gameCode') === 'demo'
    // console.log('demo', demo)
    checkpoint_list.forEach(function (checkpoint) {
      // 跳过非GPS位置
      if (checkpoint.gps == undefined) {
        checkpoint.distance = 0
        return
      }
      if (checkpoint.gps.length == 0) {
        checkpoint.distance = 0
        return
      }

      // 计算距离
      if (demo) {
        // DEBUG
        checkpoint.distance = Math.floor(Math.random() * 100) + 1
      } else {
        const gps = checkpoint.gps.split(",")
        checkpoint.distance = calculateDistance(lat, long, gps[0], gps[1])
      }
    })

    // 根据配置设置是否显示checkpoint
    if (this.data.config.gps) {
      // 显示70米范围内的场地
      this.showCheckpointByRang(70)
    } else {
      // 显示所有启用的场地（默认是主线任务）
      this.showCheckpointByRang(0)
    }
  },

  showCheckpointByRang(range) {
    const checkpoint_list = this.checkpoint_list
    const leftCount = wx.getStorageSync('leftCount') // 剩余关卡数
    let addCount = 0 // 新增关卡数

    // leftCount = 0
    if (leftCount == 0) {
      wx.showModal({
        title: '提示',
        content: '完成所有任务！',
        icon: 'success'
      })
    } else {
      // 根据距离决定关卡是否显示
      checkpoint_list.forEach(function (checkpoint) {
        // 跳过没有启用的关卡
        if (checkpoint.enable != true) {
          return
        }

        if (range > 0) {
          // 根据距离判断关卡是否显示
          if (checkpoint.distance < range) {
            checkpoint.display = checkpoint.group === 'MAIN'
            addCount++
            if (!checkpoint.display) {}
          } else {
            checkpoint.display = false
          }
        } else {
          // 显示主线任务
          checkpoint.display = checkpoint.group === 'MAIN'
          addCount++
        }
      })

      // 重新按距离排序
      if (range > 0) {
        checkpoint_list.sort((a, b) => a.distance - b.distance)
      }

      if (addCount > 0) {
        wx.showToast({
          title: '发现' + addCount + '个新任务',
          icon: 'success',
          duration: 2000
        })
      } else {
        // wx.hideLoading()
        wx.showToast({
          title: '没有发现新任务',
          icon: 'success',
          duration: 2000
        })
      }
    }

    // 设置显示
    this.setData({
      checkpoint_list: checkpoint_list
    })

    // 保存数据到本地
    saveCheckpointList(checkpoint_list)
  },

  // 选择关卡
  onSelectCheckpoint(e) {
    const index = e.currentTarget.dataset.index;
    const checkpoints = getCheckpointList()
    const checkpoint = checkpoints[index]

    // 修改当前checkpoint的状态
    checkpoint.pic = checkpoint.pic2
    if (checkpoint.status === 0) {
      checkpoint.status = 1
    }

    // 保存新数据
    saveCheckpointList(checkpoints)

    // 显示任务内容
    wx.redirectTo({
      url: 'task?id=' + checkpoint.code,
    })
  },

  //以下是按钮拖动事件
  buttonStart: function (e) {
    startPoint = e.touches[0] //获取拖动开始点
  },
  buttonEnd: function (e) {

  },
  buttonMove: function (e) {
    var endPoint = e.touches[e.touches.length - 1] //获取拖动结束点
    //计算在X轴上拖动的距离和在Y轴上拖动的距离
    var translateX = endPoint.clientX - startPoint.clientX
    var translateY = endPoint.clientY - startPoint.clientY
    startPoint = endPoint //重置开始位置
    var buttonTop = this.data.buttonTop + translateY
    var buttonLeft = this.data.buttonLeft + translateX
    //判断是移动否超出屏幕
    if (buttonLeft + 50 >= this.data.windowWidth) {
      buttonLeft = this.data.windowWidth - 50;
    }
    if (buttonLeft <= 0) {
      buttonLeft = 0;
    }
    if (buttonTop <= 0) {
      buttonTop = 0
    }
    if (buttonTop + 50 >= this.data.windowHeight) {
      buttonTop = this.data.windowHeight - 50;
    }
    this.setData({
      buttonTop: buttonTop,
      buttonLeft: buttonLeft
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    // this.initGame()
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})